package Demo;

//接口：什么是接口
//接口interface 规范
//接口就是公共的行为规范标准，大家在实现时，
// 只要符合规范标准，就可以通用
//如果想用接口，必须要实现规范

//接口的定义 接口以大写字母I开头
interface IShape {
    public static final String name1 = "haha";
    String name2 = "hehe";
    public abstract void draw();
    default public void func() {
        System.out.println("haha");
    }
    public static void func2() {
        System.out.println("haha");
    }
}
class Rect implements IShape {

    @Override
    public void draw() {
        System.out.println("矩形");
    }

    @Override
    public void func() {
        System.out.println("重写func");
    }
}
class Flower implements IShape {

    @Override
    public void draw() {
        System.out.println("❀");
    }
}
//使用关键字interface来定义接口，接口不能被实例化
//一个java文件就放一个接口，或者一个类
//此处name是歪的，只有常量才是歪的
//接口的当中成员默认是public static final 修饰的，静态常量
//抽口当中有抽象方法，方法类型默认为public abstract，而且接口当中的方法不能有具体的实现
//在dk8开始，接口可以实现default修饰的方法,也可以有static修饰的方法
//接口当中也不存在构造方法 ，接口当中的都是常量
//接口和类之间通过implement，接口需要被类实现，使用关键字implement
//接口可以向上转型，可以动态绑定,可以发生多态
//接口的命名一般使用形容词性的单词
//接口当中的方法和变量不需要加任何修饰符号，保持代码的整洁行
//接口重写的方法不能用默认权限修饰，因为重写要求子类的访问1权限要大于父类的访问权限
//接口当中不能有构造方法和代码块
//接口虽然不是类，但是也会生成对应的字节码文件
//如果类没有实现接口的所有抽象方法，则类必须为抽象类
//



public class Test {
    public static void drawMap (IShape shape) {
        shape.draw();
    }

    public static void main(String[] args) {
        IShape shape1 = new Rect();
        IShape shape2 = new Flower();
        IShape.func2();


        drawMap(shape1);
        drawMap(shape2);
    }

}


